{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "a84a6b93",
   "metadata": {},
   "source": [
    "## IOI with Masked Interventions"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "85342a5b",
   "metadata": {},
   "outputs": [],
   "source": [
    "__author__ = \"Zhengxuan Wu\"\n",
    "__version__ = \"01/31/2024\""
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e15a59bf",
   "metadata": {},
   "source": [
    "### Overview\n",
    "\n",
    "This tutorial analyzes the IOI task with a new type of trainable intervention, masked interchange intervention"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d32b1cb3",
   "metadata": {},
   "source": [
    "### Set-up"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "213a933b",
   "metadata": {},
   "outputs": [],
   "source": [
    "try:\n",
    "    # This library is our indicator that the required installs\n",
    "    # need to be done.\n",
    "    import pyvene\n",
    "\n",
    "except ModuleNotFoundError:\n",
    "    !pip install git+https://github.com/stanfordnlp/pyvene.git"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "9decbfe0",
   "metadata": {},
   "outputs": [],
   "source": [
    "import sys\n",
    "sys.path.append(\"../..\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "380028cc",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "loaded model\n"
     ]
    }
   ],
   "source": [
    "import random\n",
    "import pandas as pd\n",
    "from tutorial_ioi_utils import *\n",
    "import pyvene as pv\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "%config InlineBackend.figure_formats = ['svg']\n",
    "from plotnine import (\n",
    "    ggplot,\n",
    "    geom_tile,\n",
    "    aes,\n",
    "    facet_wrap,\n",
    "    theme,\n",
    "    element_text,\n",
    "    geom_bar,\n",
    "    geom_hline,\n",
    "    scale_y_log10,\n",
    "    scale_y_reverse,\n",
    "    scale_fill_cmap,\n",
    "    geom_text,\n",
    "    scale_fill_gradient,\n",
    "    geom_point,\n",
    "    geom_line,\n",
    "    theme_minimal,\n",
    "    ylim,\n",
    "    ggtitle,\n",
    "    ggsave,\n",
    "    labs,\n",
    "    scale_x_discrete,\n",
    "    geom_histogram,\n",
    "    scale_fill_manual,\n",
    ")\n",
    "\n",
    "# please try not to do this, the plot somehow throw warnings though :(\n",
    "import warnings\n",
    "\n",
    "warnings.filterwarnings(\"ignore\")\n",
    "\n",
    "config, tokenizer, gpt2 = pv.create_gpt2_lm()\n",
    "_ = gpt2.eval().to(\"cuda\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "id": "2616301d",
   "metadata": {},
   "outputs": [],
   "source": [
    "train_distribution = PromptDistribution(\n",
    "    names=NAMES[: len(NAMES) // 2],\n",
    "    objects=OBJECTS[: len(OBJECTS) // 2],\n",
    "    places=PLACES[: len(PLACES) // 2],\n",
    "    prefix_len=2,\n",
    "    prefixes=PREFIXES,\n",
    "    templates=TEMPLATES[:2],\n",
    ")\n",
    "\n",
    "test_distribution = PromptDistribution(\n",
    "    names=NAMES[len(NAMES) // 2 :],\n",
    "    objects=OBJECTS[len(OBJECTS) // 2 :],\n",
    "    places=PLACES[len(PLACES) // 2 :],\n",
    "    prefix_len=2,\n",
    "    prefixes=PREFIXES,\n",
    "    templates=TEMPLATES[2:],\n",
    ")\n",
    "\n",
    "aligning_variable = \"position\"\n",
    "aligning_stream = \"block_output\"\n",
    "aligning_pos = 17\n",
    "aligning_layer = 8\n",
    "\n",
    "batch_size = 20\n",
    "eval_every = 5\n",
    "initial_lr = 1e-4\n",
    "n_epochs = 50\n",
    "\n",
    "if aligning_variable == \"name\":\n",
    "    # we hacky the distribution a little\n",
    "    train_distribution = PromptDistribution(\n",
    "        names=NAMES[:20],\n",
    "        objects=OBJECTS[: len(OBJECTS) // 2],\n",
    "        places=PLACES[: len(PLACES) // 2],\n",
    "        prefix_len=2,\n",
    "        prefixes=PREFIXES,\n",
    "        templates=TEMPLATES[:2],\n",
    "    )\n",
    "\n",
    "    test_distribution = PromptDistribution(\n",
    "        names=NAMES[:20],\n",
    "        objects=OBJECTS[len(OBJECTS) // 2 :],\n",
    "        places=PLACES[len(PLACES) // 2 :],\n",
    "        prefix_len=2,\n",
    "        prefixes=PREFIXES,\n",
    "        templates=TEMPLATES[2:],\n",
    "    )\n",
    "else:\n",
    "    train_distribution = PromptDistribution(\n",
    "        names=NAMES[: len(NAMES) // 2],\n",
    "        objects=OBJECTS[: len(OBJECTS) // 2],\n",
    "        places=PLACES[: len(PLACES) // 2],\n",
    "        prefix_len=2,\n",
    "        prefixes=PREFIXES,\n",
    "        templates=TEMPLATES[:2],\n",
    "    )\n",
    "\n",
    "    test_distribution = PromptDistribution(\n",
    "        names=NAMES[len(NAMES) // 2 :],\n",
    "        objects=OBJECTS[len(OBJECTS) // 2 :],\n",
    "        places=PLACES[len(PLACES) // 2 :],\n",
    "        prefix_len=2,\n",
    "        prefixes=PREFIXES,\n",
    "        templates=TEMPLATES[2:],\n",
    "    )\n",
    "\n",
    "D_train = train_distribution.sample_das(\n",
    "    tokenizer=tokenizer,\n",
    "    base_patterns=[\"ABB\", \"BAB\"],\n",
    "    source_patterns=[\"ABB\", \"BAB\"]\n",
    "    if aligning_variable == \"position\"\n",
    "    else [\"CDD\", \"DCD\"],\n",
    "    labels=aligning_variable,\n",
    "    samples_per_combination=50 if aligning_variable == \"position\" else 50,\n",
    ")\n",
    "D_test = test_distribution.sample_das(\n",
    "    tokenizer=tokenizer,\n",
    "    base_patterns=[\n",
    "        \"ABB\",\n",
    "    ],\n",
    "    source_patterns=[\"BAB\"] if aligning_variable == \"position\" else [\"DCD\"],\n",
    "    labels=aligning_variable,\n",
    "    samples_per_combination=50,\n",
    ") + test_distribution.sample_das(\n",
    "    tokenizer=tokenizer,\n",
    "    base_patterns=[\n",
    "        \"BAB\",\n",
    "    ],\n",
    "    source_patterns=[\"ABB\"] if aligning_variable == \"position\" else [\"CDD\"],\n",
    "    labels=aligning_variable,\n",
    "    samples_per_combination=50,\n",
    ")\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "id": "73234357",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 50/50 [00:17<00:00,  2.78it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'accuracy': 0.58, 'kl_div': tensor(-77.9607, device='cuda:0')}\n",
      "bits turned on:  tensor(534.7392, device='cuda:0', grad_fn=<SumBackward0>)\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    }
   ],
   "source": [
    "def calculate_loss_with_mask(logits, labels, intervenable, coeff=1):\n",
    "    loss = calculate_loss(logits, labels)\n",
    "    for k, v in intervenable.interventions.items():\n",
    "        mask_loss = coeff * torch.norm(v.mask, 1)\n",
    "    loss += mask_loss\n",
    "    return loss\n",
    "\n",
    "config = pv.IntervenableConfig({\n",
    "    \"component\": aligning_stream, \"layer\": aligning_layer,\n",
    "    \"intervention_type\": pv.SigmoidMaskIntervention,\n",
    "    },\n",
    ")\n",
    "pv_gpt2 = pv.IntervenableModel(config, gpt2)\n",
    "pv_gpt2.set_device(\"cuda\")\n",
    "pv_gpt2.disable_model_gradients()\n",
    "\n",
    "total_step = 0\n",
    "optimizer = torch.optim.Adam(\n",
    "    pv_gpt2.get_trainable_parameters(), lr=initial_lr\n",
    ")\n",
    "target_total_step = int(len(D_train) / batch_size) * n_epochs\n",
    "temperature_start = 1e-2\n",
    "temperature_end = 1e-7\n",
    "temperature_schedule = (\n",
    "    torch.linspace(\n",
    "        temperature_start, temperature_end, target_total_step\n",
    "    ).to(torch.bfloat16).to(\"cuda\")\n",
    ")\n",
    "pv_gpt2.set_temperature(temperature_schedule[total_step])\n",
    "scheduler = torch.optim.lr_scheduler.LinearLR(\n",
    "    optimizer, end_factor=0.1, total_iters=n_epochs\n",
    ")\n",
    "\n",
    "for epoch in tqdm(range(n_epochs)):\n",
    "    torch.cuda.empty_cache()\n",
    "    for batch_dataset in D_train.batches(batch_size=batch_size):\n",
    "        # prepare base\n",
    "        base_inputs = batch_dataset.base.tokens\n",
    "        b_s = base_inputs[\"input_ids\"].shape[0]\n",
    "        for k, v in base_inputs.items():\n",
    "            if v is not None and isinstance(v, torch.Tensor):\n",
    "                base_inputs[k] = v.to(gpt2.device)\n",
    "        # prepare source\n",
    "        source_inputs = batch_dataset.source.tokens\n",
    "        for k, v in source_inputs.items():\n",
    "            if v is not None and isinstance(v, torch.Tensor):\n",
    "                source_inputs[k] = v.to(gpt2.device)\n",
    "        # prepare label\n",
    "        labels = batch_dataset.patched_answer_tokens[:, 0].to(\n",
    "            gpt2.device\n",
    "        )\n",
    "\n",
    "        assert all(x == 18 for x in batch_dataset.base.lengths)\n",
    "        assert all(x == 18 for x in batch_dataset.source.lengths)\n",
    "        _, counterfactual_outputs = pv_gpt2(\n",
    "            {\"input_ids\": base_inputs[\"input_ids\"]},\n",
    "            [{\"input_ids\": source_inputs[\"input_ids\"]}],\n",
    "            {\n",
    "                \"sources->base\": aligning_pos\n",
    "            },\n",
    "        )\n",
    "        eval_metrics = compute_metrics(\n",
    "            [counterfactual_outputs.logits], [labels]\n",
    "        )\n",
    "        loss = calculate_loss_with_mask(\n",
    "            counterfactual_outputs.logits, labels, pv_gpt2\n",
    "        )\n",
    "        loss_str = round(loss.item(), 2)\n",
    "        loss.backward()\n",
    "        optimizer.step()\n",
    "        scheduler.step()\n",
    "        pv_gpt2.set_zero_grad()\n",
    "        pv_gpt2.set_temperature(\n",
    "            temperature_schedule[total_step]\n",
    "        )\n",
    "        total_step += 1\n",
    "        \n",
    "# eval\n",
    "eval_labels = []\n",
    "eval_preds = []\n",
    "with torch.no_grad():\n",
    "    torch.cuda.empty_cache()\n",
    "    for batch_dataset in D_test.batches(batch_size=batch_size):\n",
    "        # prepare base\n",
    "        base_inputs = batch_dataset.base.tokens\n",
    "        b_s = base_inputs[\"input_ids\"].shape[0]\n",
    "        for k, v in base_inputs.items():\n",
    "            if v is not None and isinstance(v, torch.Tensor):\n",
    "                base_inputs[k] = v.to(gpt2.device)\n",
    "        # prepare source\n",
    "        source_inputs = batch_dataset.source.tokens\n",
    "        for k, v in source_inputs.items():\n",
    "            if v is not None and isinstance(v, torch.Tensor):\n",
    "                source_inputs[k] = v.to(gpt2.device)\n",
    "        # prepare label\n",
    "        labels = batch_dataset.patched_answer_tokens[:, 0].to(gpt2.device)\n",
    "\n",
    "        assert all(x == 18 for x in batch_dataset.base.lengths)\n",
    "        assert all(x == 18 for x in batch_dataset.source.lengths)\n",
    "        _, counterfactual_outputs = pv_gpt2(\n",
    "            {\"input_ids\": base_inputs[\"input_ids\"]},\n",
    "            [{\"input_ids\": source_inputs[\"input_ids\"]}],\n",
    "            {\n",
    "                \"sources->base\": aligning_pos\n",
    "            },\n",
    "        )\n",
    "        eval_labels += [labels]\n",
    "        eval_preds += [counterfactual_outputs.logits]\n",
    "eval_metrics = compute_metrics(eval_preds, eval_labels)\n",
    "for k, v in pv_gpt2.interventions.items():\n",
    "    mask = v.mask\n",
    "    temperature = v.temperature\n",
    "    break\n",
    "print(eval_metrics)\n",
    "print(\n",
    "    \"bits turned on: \", \n",
    "    torch.sigmoid(mask / torch.tensor(temperature)).sum()\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "id": "9ba4df72",
   "metadata": {},
   "outputs": [],
   "source": [
    "bit_map = torch.sigmoid(mask / torch.tensor(temperature)).tolist()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "id": "485e7a0b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABkAAAAGQCAYAAAD2lawGAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8WgzjOAAAACXBIWXMAAB7CAAAewgFu0HU+AACi0UlEQVR4nOzdd3xUVf7/8fckISEJhN6kg7CoFKUoNgSBdQFRKWJD0bXurgLqrg11dW2r36+KbVdXXRUBWUURFdsiIIIgSkdQuhQpgYSEkgSS3N8f/DLfmWTKuXfuTZm8no+HDzNzP+ecz23nHubM3OuzLMsSAAAAAAAAAABAHEmo6AQAAAAAAAAAAADcxgQIAAAAAAAAAACIO0yAAAAAAAAAAACAuMMECAAAAAAAAAAAiDtMgAAAAAAAAAAAgLjDBAgAAAAAAAAAAIg7TIAAAAAAAAAAAIC4wwQIAAAAAAAAAACIO0yAAAAAAAAAAACAuMMECAAAAAAAAAAAiDtMgAAAAAAAAAAAgLjDBAgAAAAAAAAAAIg7TIAAAAAAAAAAAIC4wwQIAAAAAAAAAACIO0yAAAAAAAAAAACAuMMECMrVm2++KZ/PJ5/PpzZt2lR0OqgiOG7MPfTQQ/5t1bdv37BxbNP/U7IdfD6f5s2bV9HpxL2cnBz97//+r/r27avGjRurRo0aHIuoErZu3RrUX2zdurWiU6p2+vbt69/+Dz30UEWnA0OcOwAAAKhISRWdAAAAqB7WrVunQYMG6ZdffqnoVAAAAAAAQDXABAj83nzzTV133XVR41JTU1WnTh2deOKJ6tWrly677DKdccYZruaydetWvfnmm/7XfMuv8rn88sv1n//8R9Lxb9Bv3rw5pm9vf/jhhxo2bJj/9cSJEzVu3LhY00Q1sWLFCn344YeSpLp162r8+PEVmg/KKi4u1siRI4MmP1JTU9WkSRMlJiZKklq0aOG4/oceekgPP/yw//WWLVsq5Bcl8+bN8/+SqE2bNrr22mvLPQegvPTt21dff/112OXJyclKTU1Vo0aN1Lx5c3Xq1Em9evXS+eefr7Zt25ZjpgAAAACqKyZAYFteXp7y8vK0e/duLViwQM8++6wGDBigf/3rX679Y3br1q1BH2QxAVL5XHfddf4JEMuyNGnSJD344IOO6wuc8KpRo4auuuqqWFNENbJixQp/n9G6dWsmQCqhzz77TGvXrpV0fNL0X//6l6699lolJcXXUGTevHn+Y/G8885jAgTV2tGjR3X06FHl5ORo48aN+vrrr/XKK69Ikk4//XSNHTtWl19+uX8SFAAAAADcxjNAENYJJ5yg9u3bB/3Xrl07NWnSRD6fLyh29uzZOuecc7Rp06aIdV577bWyLEuWZXH/3ypu4MCBQd/WnjRpkuO69u3bp08//dT/+sILL1TDhg39rzlu3Mc2/T8l28GyrIjPTUFs5syZ4/974MCBuuGGG+Ju8gPxrU2bNkH9Bc+sCZaUlFRm3Ni6dWtlZGSUGTdK0pIlSzR69Gidfvrp+vHHH43amDdvnn/78+WYqoNzBwAAABWJCRCENWXKFG3cuDHov02bNmn37t06ePCgZsyYoS5duvjjf/31V91www0VmDHKU0JCgq6++mr/602bNmnBggWO6poyZYqOHTvmf803poH4s3nzZv/f3bp1q8BMAHihefPmZcaNW7duVU5OjgoLC7V69Wq9+uqrGjRoUNCEyLJly3TGGWfo22+/rcDsAQAAAMQrJkDgSHp6ui655BItWrQoaBJk3rx5/lucIP6Vnqh46623HNUTWK5JkyYaPHhwLGkBqIRyc3P9f6elpVVgJgDKW0JCgjp37qwbbrhBn376qX788Uf17t3bv/zw4cO65JJLtGXLlgrMEgAAAEA84t4TiEl6erruvfdeXXnllf73Fi5cqJNPPrkCswpv+fLlWr16tX799VfVrFlT3bp1U58+fSLee/qHH37Q0qVLtX//ftWpU0ddunTROeeco4QE+/OH27dv1+rVq7Vlyxbl5OQoJSVFDRo0UJcuXXTaaac5qjOUrVu36rvvvtOOHTuUmJio1q1bq3///srIyHCl/hIdO3bU2WefrYULF0qS3n33XT3//PNKTU01rmP16tVavny5//VVV13lym1x8vLytHTpUq1du1bZ2dkqLCxUenq6mjVrphNPPFFdu3ZVjRo1Ym7HDXv27NHq1au1ceNGHThwQAkJCWrQoIE6deqk008/vdLk6bbs7GytWrVK69evV1ZWlizLUoMGDdS+fXudeeaZto6jilBcXKzFixfr559/1t69e1WzZk01adJEZ511llq1auVKGzk5OZo3b562bdumvLw8NWnSRH369CnXhwf/9NNPWrp0qfbs2aOioiI1adJEXbt21amnnmqrnqKiIm8SdFlJ/7l9+3YlJiaqZcuW6t+/v+rVq1ch+axfv96//Y8ePaomTZrotNNOU9euXV2pf8+ePVq4cKF+/fVXHTx4UK1btw66ppenzMxMLViwQLt27VJOTo4aNmzov864dV2YO3eutm7dqtzcXDVq1Ei9e/fWKaec4kL25pYuXao1a9Zo165dqlWrljp27KjzzjtPKSkpjurLzMzU3Llzg47Zs88+W02bNnU5c/ecdNJJmj9/vq655hpNmzZN0vH1uOaaa/TNN9942va2bdu0ePFibd++XUVFRerQoYMGDBig2rVrhy2zZcsWLViwQDt37lRKSoratWungQMHxjSZW5WO92PHjvnH0FlZWSooKFBaWpqaNGmi9u3bq1u3bp5ds48dO6YFCxZo06ZNyszMVO3atdWsWTOde+65aty4sStt7NmzR998843/mDjhhBPUr18/NWvWzHZdubm5+uGHH/Tzzz/rwIEDko7/e6l58+bq2LGjTjnlFNfG+wAAADBkAf/fG2+8YUny/zd37lyjcmvXrg0q99hjjxm10bp16zLLzzvvvKC6ov133nnnlakj1Dr897//tbp27RqyjjZt2liff/55mXo+/vhjq1OnTiHLtG3b1po9e7bR9lm0aJH1pz/9yWrbtm3Edalfv7718MMPWwcPHjSqN3Bb/fWvf7Usy7J+/vlna+DAgZbP5ytTf82aNa0//elPxvWbeu2114LamTJliq3yd9xxR1D51atXl4mJdtwEys7Otm677TYrIyMj4vZOTU21hgwZYv3www8h6xkzZow/dsyYMUbrsmXLlqA2tmzZEjZ29erV1l133WWddNJJEfNMT0+3br/9dmvv3r1GOfz1r3+NeH6UMNmmgdvAyX+hbN682frb3/5mnXbaaVZCQkLYssnJydZ1111nbd26NeL6tm7d2lZOofal3X7vyJEj1sMPP2w1bNgwbDs9e/a0/vvf/0aty7JCH2u5ubnWTTfdZKWmpoasf+DAgdb69euN6ndq6tSpVseOHcOuY8uWLa2XXnrJKiwsDFuH3f0Ti8BjP9r5F5jXG2+8YVmWZa1fv9767W9/G7L/TExMtP7whz9Yubm5Yeu0e36U9NuhFBUVWa+99prVoUOHsOVPPPFEa9q0aUbbJtT1YsOGDdbgwYOtxMTEoHrr1KljWZZlDRw40P9enz59jNopsWvXrqB6X3nllYjxc+fOtc4555ywfULJ9TE/Pz9q26H6wIKCAuuee+6x6tatG/Z8/f7776PWbdrHh4ubNWuW1blz55A51K1b15o4cWLUHALt2rXLuuyyy6ykpKQy9SUlJVkjR460fv31V8uynF3TTAQeW9Guz6EcPny4zDaJ1A+HOpZN4zZv3mz97ne/C3mc1a5d23r66afL1LN27dqgc6F0meeff972OleV492yLCsvL8964IEHrEaNGkXsz2rUqGH17dvX+vLLL0PWY2d8VCIrK8saN25c2PFcQkKC1a9fP+N1CXVM7Nq1y7r00ktDnkM+n88aNWqUtWvXLqP6d+zYYV199dVWzZo1I26r2rVrW5deeqm1ceNGo3oBAAAQOyZA4Od0AmT16tVB5SL9A74iJkCee+65iB+0Ssc/3Jo+fbq/jkcffTRq2zVq1Ag5cVJagwYNbK1T165dre3bt0ett/Q/5L766quoH/pLsjp27Gj8jzkTubm5Vlpamr/+3/72t8Zljx07ZjVp0sRftkePHiHjTCdAtmzZYvsD12effTZkXV5PgPTo0cNWnq1atQo5OVRaZZ8AGTFihK066tWrZ82bNy/sepT3BMgvv/wScVKg9H9jx461iouLI9ZZ+ljbsmWLURuNGjWy1q5dG7FuJ/Lz861LLrnEeB3POecc68CBAyHrqioTIJ9//rlVu3btqPn17t3bOnToUMg67Z4f4T68zczMtHr37m1cz9VXXx1xEsqyyl4vPvvss7DrWzIB8uabb/rf8/l81i+//GKyGyzLsqxnn33WXzY5OdnKysoKGVdYWGjdfPPNxuvarVu3qJPBpfvArKws64wzzohad1pamvX1119HrDuWCZBHH3005ORa6f/+9Kc/GW3j1atXR5yELfmvWbNm1sqVKyvtBIhlHf/CSWDOQ4YMMWrPzgTI/PnzrXr16kXdXuPGjfPX8eWXXwaNb8L998ADDxitZ1U73vfv32+ddtpptvq1wO0XyO4EyIoVK4LGh5H+S0hIsJ566qmI9VlW2WNi6dKlVtOmTaPWf+KJJ0YdNy9dutTo+Ar8b8aMGVFzBgAAgDu4BRZitnjx4qDXgc8Esat58+Zq37698vLy9Ouvv/rfb9++fdj4SP773//q73//u4qLi9WpUycNHz5cbdu21ZEjRzR79mx9/PHHko7fmuX3v/+9zj33XH322We6//77JSmoTF5enmbPnq2PPvpI0vGf5F977bVav359xNsmlEhMTFTv3r11+umnq3Xr1qpTp44OHTqk1atX68MPP9TevXslSatWrdKIESO0cOFC41sg7Nq1S5dffrlyc3OVmpqqESNGqFevXkpJSdG6des0bdo07dmzR9Lx26n89re/1XfffefK7Qpq166tESNG6O2335YkzZ49Wzt37oy6byTp888/9+clxfbwc8uyNGrUKP3yyy/+93r06KGBAweqTZs2qlmzpnJzc/XLL79o6dKlWrBggQoLCx235xafz6fu3burd+/eat++verWrau8vDz99NNP+vjjj7V161ZJx2/ZMXToUK1cudL1W5mFU3JrC1M7d+5Ufn6+cfzJJ5+sM888UyeddJLq1auno0ePavPmzZo1a5b/WULZ2dm6+OKLtWrVqpC3lWrTpo2SkpJ08OBB/zmUlJSk1q1bh10np/bt26c+ffoEHWMtW7bUZZddpo4dO+rIkSNatGiRPvzwQxUUFEiSnn/+efl8Pk2cONGojSNHjujiiy/W+vXrVbNmTV100UXq3bu36tSpo507d+rdd9/VmjVrJP3f7WK+++47126nYVmWRo4cqU8++cT/Xu3atXXppZfqtNNOU1JSktasWaNp06Zp//79kqQFCxZo4MCBWrBggZKTk4PqK9k/UvDxUa9ePdWvX9+VnGO1bt06jR07VgcPHlTjxo01YsQInXLKKf7+c/Lkyf5ja/Hixbr//vv17LPPlqmn5FzJyspSdna2JKlmzZph+8JQ679//36dc845+vnnn/3vtWjRQpdccok6deqklJQUbdy4Ue+9957/ofJvv/22UlNT9corrxit7+bNm/Xcc8/p4MGDysjI0PDhw3XqqacqPT1dO3bs0H//+19J0vDhw/WHP/xBeXl5sixL77zzju6++26jNqZMmeL/e/DgwSFvH2ZZli6//HJNnz7d/16tWrV00UUXqVevXsrIyNDu3bv1ySefaNGiRZKklStXasCAAVqyZInR7aKKi4t1xRVX6LvvvlNiYqIGDRqkPn36qEGDBsrMzNSHH37oH8McOXJEo0eP1tq1a1WrVi2j9TQ1efJkPfDAA5KO3/rp4osvVrt27XTs2DEtWbJE77zzjo4ePSpJeumll/Tb3/5WF110Udj69uzZo4EDB2rf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yScHffP+nnvucfWXIN27d9dll13mfz1jxgz98Y9/DHmsrV27Vr/73e+Cvrn6P//zP67l4pXk5GQ98sgj/tdbtmzRkCFDQt4CLjs7WyNGjAh6BsFdd90V9Muq6qpXr17+vuDIkSN64IEHjD68HDJkiEaMGOF/ffXVV+vhhx/W4cOHI5bbsWOHnn76abVv397zB13XqlVLl1xyif/1Cy+8oAULFvhfm06qN2rUKOhXCa+88opGjhwZ9fkIubm5mjJlis4888ygD86rk9TUVD3zzDP+1/v27dOZZ56p119/PehYWb9+vX7/+9/rvvvuU0JCQplnUZS34uJi/fjjj3r99dc1ePBgnXzyyUFjklq1amnmzJlx+YFwVTzeH3zwQfXo0UOTJk3yP88ulPz8fN14443+sYJ0fBLCqUsuuURnnXWW//XEiRP1yCOPhPwV7MKFC3XxxRf7l6WkpOjRRx913LZT/fr107Bhw/TFF18E/eqztJ07d+qmm27yv27WrFnMXxgDAACAmaToIaiurrrqKv831gIdPXpU+/btU15eXpllY8eO1TXXXONK+9dee63/vtBfffWVmjZtqjZt2qh27dr+mJ49e+q1115zpT231ahRQ3fccYcefPBBSce/7XjyySfr8ssvV/fu3VWjRg1t27ZNn3zyif85AQMHDlR+fr6++eYbW23deOONmjFjhn788Ud16dJFI0eO1Omnn67k5GT99NNPeuedd7R7925/fJcuXTRhwgT3VjaElJQUXXHFFfrnP/9ZZlngr0PcYlmW5s2bp7lz5yojI0Nnn322evTooWbNmik9PV0HDhzQqlWrNGPGjKB/qE+YMCHsN5YffPBB/weSmZmZ6tGjh6688kr16tVLSUlJ2rp1qz788EP/w2Uffvhh/fWvf42a69133+0/T/bs2aMePXpoxIgROvPMM5Wenq5ff/1VX375pebPny/p+P7q1KmT3nvvvZi2kR179+4Neli7z+fTqFGjbNWxcePGoNd33XWX/5cfhw8f1vnnn6+hQ4eqb9++qlu3rjIzMzV37lx98cUXKi4u1gknnKCLLroo6PYW4SQnJ+vKK6/Uv/71L0nHb7v27rvvqk2bNkG/PLnooov0t7/9zdZ6lHjxxRe1ePFi/7c9X375ZX366ae67LLL1KFDB+Xl5WnRokWaMWNG0MTIuHHjgp6dUJndfPPN+uSTT/z76dtvv1WnTp00atQonXbaaUpKStKaNWs0bdo07du3z1+uV69eUb+pW100b95cAwcO9P8y8qmnntLzzz+vNm3aKCUlxR93yy236JZbbgkq++9//1sbN27UypUrVVRUpIceekjPPfecfve736l79+6qX7++ioqKlJ2drZ9//llLly7VypUry3X9Ro8eralTp0o6PklWok6dOrZuq3jrrbdq+fLl/m9vv//++/roo480YMAAnXnmmWratKmSkpJ04MABbd26VStWrNDixYv9v6gJ/KZ4dXPFFVdowYIF/mcz7d+/XzfccINuueUWNWnSREeOHAm6zt11113atWuXfv75Z0ny7Dk9O3fuLPMg68LCQh04cEC5ublhfzVX8kH7ySef7ElelUFVPN6XLVumMWPG6JZbbtGZZ56pXr16qXnz5srIyNChQ4e0du1azZgxQ7t27fKX+f3vfx/TfkxISNAbb7yh3r17+4/hBx98UO+8845Gjhyp1q1bKycnR3PnztVnn30WNOHw97//PegLJuWluLhYH374oT788EM1bNhQZ599trp3767GjRsrNTVV+/fv1w8//KCZM2fqyJEj/nJPPvlkhd0KFgAAoLphAgRhmT74WZLq1aunJ598UjfeeKNr7d95552aPXu25syZI+n4PzA2b94cFBP4C4PK6N5779WCBQv8H4QdPHhQr776asjY7t27a+rUqRo5cqTtdpo2bapp06bpkksuUW5urt5++229/fbbIWM7dOigL774IuTkltuuu+66MhMgaWlptj9Itys3N1efffZZ0MOZQ/njH/+o+++/P+zy4cOH65ZbbvF/AF9QUKA33nhDb7zxRlCcz+fTQw89pGuuucZoAuTqq6/WvHnz/B+EFBQUaOrUqf4PFQO1a9dOH3zwQYV8qzHQ4cOHQ/66yI4+ffoETRIVFxdr5syZZZ4hJB3/xuwHH3wQdR8GeuKJJ7Ro0SL/LSaOHTtW5tYwp556quP8GzZsqPnz52vgwIH+yaFt27ZF/HXHbbfdpmeffdZxm+XN5/Pp/fff16hRo/TRRx9JOt5vRXruy9lnn61Zs2YpOTm5vNKs9P75z3+qX79+/tvI5Ofn66effgqKCZyULpGRkaEFCxboqquu8m//7OxsvfPOO0a3xCqPD9MGDhyoxo0ba+/evUHvjxw5MmiCx8Tr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Y2OdIPF0AkSSJk+erEGDBmn+/PmyLEtz587V3LlzQ8aWPPz8vPPO09tvv+11atDxbV5yUcdxJtsjXIyTbRk4qApXV6R6TePsxJu2F+n9aLm4sb52Y53kFS0/p+sRqQ2nx6CT/eZ2XbG0ZWdZtP0US/4mcSbbLNqxYLLeXrdtEh9LLrH0pyblTcraPXZMlFe/40ZbXrUdKsbpNoz13K/o/WHnXI7lnHFz39qJcRLvZr12zlk3x2FO8qqoY8F0mWnbdut0a/+ZtFU6xo0+vXQZN64bbq63W/vLydgp1nGx07adjEu82Iam5Zweh15f07zo403bi/UccHNsGi3OzWubm2MnO9vEtO1Y6jepx4u8nMaEirN77XXj2ujV+nhx/TN53+vzz819G21ZeYwhnNTrpP144PV6e/7wh9TUVM2ZM0dPPvmkmjZtKsuywv7XrFkz/c///I+++uorpaamep0aAAAAAAAAAACIU57/AkSSEhIS9Je//EW33367vv32W3333XfatWuXDh48qNq1a6tZs2Y644wzdNZZZykpqVxSAgAAAAAAAAAAcaxcZxuSkpLUp08f9enTpzybBQAAAAAAAAAA1Yznt8ACAAAAAAAAAAAob55OgOzatUs9evRQjx499NlnnxmV+fzzz9W9e3f16tVL+/fv9zI9AAAAV40dO7aiUwAAAAAAAP+fpxMgU6dO1fLly7Vlyxb179/fqMz555+vbdu2admyZZo6daqX6QEAAAAAAAAAgDjl6QTInDlz5PP5NGTIECUnJxuVSU5O1oUXXijLsvTf//7Xy/QAAAAAAAAAAECc8nQCZPXq1ZKk008/3Va5nj17BpUHAAAAAAAAAACww9MJkL1790qSmjVrZqtckyZNJEl79uxxPScAAAAAAAAAABD/kjytPClJx44dU0FBga1yR48elSRZluVFWiHl5ORo+vTpWrJkifbv36+UlBS1b99egwcPVu/evW3Xd+TIEX333XdasWKFNm7cqL1796q4uFj16tVTp06dNGjQIJ1yyilhy0+cOFFz5syJ2EarVq304osv2s4NAAAAAAAAAIB45+kESKNGjbRt2zb9/PPPtsr99NNPkqSGDRt6kVYZ27Zt04QJE5STkyNJSk1N1eHDh7VixQqtWLFCQ4cO1Y033mirzttvv127du3yv05OTlZCQoL27t2rvXv3av78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jv9S+YorrlDt2rUlHf+c4LTTTtNdd90l6fitAH/88Ud/uQMHDvg/Nxg9erQuuOACJSUd/01G586dde+998rn8+nHH3/UDz/8UKbd999/X4cPH1b9+vU1YcIENWvWTNLx/vymm25Sz549ZVmWJk2aFDZ3JkBQLZWctH369FGjRo3KLB8xYoR8Pp+ysrK0evXqcs4OACpWenq62rVrF3Z5vXr11KNHD0nSpk2bgpatWrVK2dnZ8vl8Gj58eJmyjRs3Vp8+fST9X18ciP4ZQHWydu1affnll+rQoYP/w7Fw6F8BILqvvvpK+/btU4MGDcpMckRCHwsAkWVnZ0uSTjzxxJDL27Ztq8TEREny39pKkr799lsdPXpUaWlpGjx4cJlyHTp08N8yq3T/almW5s+fL0kaNGiQ0tLSypQfOXKkJGnDhg3auXNnyNyYAEG1k5eXpw0bNkg6fnuXUBo1aqQWLVpIklauXFluuQFAVVHyq5CioqKg91etWiVJatmyZch//EnSaaedJkn6+eefgwZG9M8AqpNjx47pxRdflM/n0x//+EclJET+pxn9KwBEV/Lh2VlnnVXmNlWR0McCQGRNmjSRJG3cuDHk8i1btqioqEgJCQn+X8FJ/9e/nnzyyUG3xQpU0r+W7h+3b9/un3gJ17/+5je/8U+MhOtfmQBBtbNjxw7/g31bt24dNq5k2fbt28slLwCoStasWSOpbD9a0mea9K+WZQXd657+GUB18t5772nHjh0aMmSI2rdvHzWe/hUAIjt69Kg2b94sSWrfvr127Nihp59+Wtdcc42GDx+u66+/XhMnTtS2bdvKlKWPBYDILrjgAknSnDlzNG3aNB08eFDS8S9FrlixQk899ZSk47cRLLlNlWSvf83JyVFubq7//cD+OvB2hoESExP9E8zh+lcego5qJysry/93/fr1w8aVLCuZaQQAHLd48WL/tz769+8ftKykjzXpX6XgPpb+GUB1sX37dk2fPl3169c3vkUL/SsARLZ3717/8zV+/fVX/fOf/1RBQYGSk5OVnJyszMxMzZkzR998841uv/12nXPOOf6y9LEAENmFF16ozMxMffzxx5o6daqmTp2qtLQ05efnq7i4WM2bN9fNN9+sIUOGBJUr6fPs9K8ld5woKVurVq2wvx4JLB+uf2UCBNVO4E9VI508Jcvy8vI8zwkAqorM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",
      "text/plain": [
       "<Figure size 800x200 with 1 Axes>"
      ]
     },
     "metadata": {
      "image/png": {
       "height": 200,
       "width": 800
      }
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    }
   ],
   "source": [
    "# Convert the list to a DataFrame\n",
    "df = pd.DataFrame({'Value': bit_map, 'Index': range(len(bit_map))})\n",
    "\n",
    "# Create a barplot\n",
    "plot = ggplot(df, aes(x='Index', weight='Value')) + geom_bar() + \\\n",
    "       ggtitle('Bitmap Visualization of Intervening Dimensions') + \\\n",
    "       theme(figure_size=(8,2))\n",
    "\n",
    "print(plot)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "968049e5",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.12"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
